package com.ruyuan2020.im.design.mandator.nouse;



/**
 * 命令模式是一种行为设计模式，它允许将一个请求封装为一个对象，从而可用不同的请求把客户端参数化，对请求排队或记录请求日志，
 * 以及支持可撤销的操作，主要目的是将调用操作的对象与知道如何实现该操作的对象解耦。
 *
 * 举一个业务中的例子来说明命令模式：假如有一个智能家居系统，其中有各种设备如灯光、空调、窗帘等，用户可以通过手机应用、语音助手或墙壁开关来控制这些设备，
 * 在这个场景中，命令模式可以很好地应用，在命令模式中有如下几个角色和分工：
 *
 * 命令对象：每个设备操作（如“打开灯光”、“关闭空调”）都可以封装为一个命令对象，这个命令对象包含了执行该操作所需的所有信息，包括目标设备、操作类型等。
 * 调用者：用户或用户通过的界面（如手机应用）是调用者，他们不知道具体如何执行某个操作，但他们可以创建和发送命令对象。
 * 接收者：实际执行操作的设备（如灯光设备、空调设备）是接收者，它们知道如何响应特定的命令。
 * 撤销操作：命令模式还支持撤销操作，例如，如果用户误操作打开了灯光，他们可以发送一个“关闭灯光”的命令来撤销之前的操作。
 */

// 灯光类，作为接收者
public class Light {
    private boolean isOn;

    public Light() {
        this.isOn = false;
    }

    // 打开灯光
    public void turnOn() {
        this.isOn = true;
        System.out.println("Light is on.");
    }

    // 关闭灯光
    public void turnOff() {
        this.isOn = false;
        System.out.println("Light is off.");
    }

    // 检查灯光状态
    public boolean isOn() {
        return isOn;
    }
}
